iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
1
自我挑戰組

關於 Ruby on Rails 的那些事系列 第 16

Day 16 - session 和 cookie - 下集

  • 分享至 

  • xImage
  •  

昨天在 session 小節講述了實作方式可以把狀態存在網址中,但大多數做法不會是如此,因為危險性太高。
那麼有其他方式嗎?答案是有的!

cookie

Server 傳送給瀏覽器的一小段資料,並且請瀏覽器保存起來,以便往後向相同的伺服器發送請求的同時,附上這段 Cookie 的資料。

以昨天早餐店的例子來說,我點完餐並且結帳之後,想在餐點準備期間先去影印店印報告,於是老闆把餐點寫在紙條上,把這張紙條交給我,讓我在辦完事情後,拿著這張紙條去兌換餐點。老闆就像 server 的角色,而我是客戶端收到老闆發給我的紙條,紙條就是 cookie!

但是,有個小小的狀況,早餐店老闆在月底結算營收時,發現賣出去的餐點數量,和收入無法核對到正確數字。於是展開調查,發現有些客人偷偷添加餐點在紙條上。老闆為了因應這樣的情況而改變方式,當客人點餐時,他只發給客人一個號碼牌,而在他自己的小本本上紀錄每個號碼牌所對應到的餐點有哪些,在客人來取餐時,要給這張號碼牌,讓老闆可以確認這號碼對應到的餐點。

回到網頁使用者體驗來看,因為HTTP的每次請求都是獨立的,不會紀錄狀態,在沒有 cookie 情況下,當你登入會員後,每次跳轉頁面就要再輸入一次帳號密碼才能執行,這樣不是很麻煩嗎?所以才會有這樣的機制產生,當使用者在第一次登入時,server 會發送一個 cookie 給使用者的瀏覽器,紀錄當前使用者為登入狀態,如此一來,使用者在跳轉頁面時,如果會需要用到身份驗證的功能(比方說購物車),瀏覽器發送請求時,會一併出示 cookie 給 server 進行身份核對,如果正確就給予回應。

應用時機:

  1. 儲存和追蹤使用者行為
  2. 儲存使用者登入狀態、購物車等伺服器所需的資訊
  3. 儲存使用者設定和偏好

參考資料:
白話 Session 與 Cookie:從經營雜貨店開始
麥克的半路出家筆記

學無止盡,每天都要進步一點點!


上一篇
Day 15 - session 和 cookie - 上集
下一篇
Day 17 - Side project之前言與 User story
系列文
關於 Ruby on Rails 的那些事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言